Petrolib
also allows you to read in your picked well tops. Using the Zonation
class, you can extract information about the reservoir tops and bases, and their names
# Importing the load_las function from the petrolib.file_reader module
from petrolib.file_reader import load_las
# Loading data from the LAS file 'ATAGA 11.las' using the load_las function from the petrolib.file_reader module,
# specifying to return a DataFrame (well_df) and ignoring the LAS object (using '_' as a placeholder),
# and selecting specific log curves ('GR', 'ILD', 'RHOB', 'NPHI')
well_df, _ = load_las('ATAGA 11.las', return_csv=True, curves=['GR', 'ILD', 'RHOB', 'NPHI'])
# Resetting the index of the DataFrame
well_df = well_df.reset_index()
# Displaying the first few lines of the DataFrame
well_df.head()
DEPT:1 | GR | ILD | RHOB | NPHI | |
---|---|---|---|---|---|
0 | 1192.3776 | 18.624901 | NaN | NaN | NaN |
1 | 1192.5300 | 18.484600 | NaN | NaN | NaN |
2 | 1192.6824 | 18.877001 | NaN | NaN | NaN |
3 | 1192.8348 | 21.032200 | NaN | NaN | NaN |
4 | 1192.9872 | 22.497999 | NaN | NaN | NaN |
Load zonation info
# Importing the Zonation class from the petrolib.plots module
from petrolib.plots import Zonation
# Creating an instance of the Zonation class with parameters specifying DataFrame(well_df) and path to tops file('ataga 11.csv')
well11tops = Zonation(well_df, path='ataga 11.csv')
# Displaying the zonation information using the instance of the Zonation class
well11tops
<petrolib.plots.Zonation at 0x7f3d661c81f0>
# Extracting well information by calling the Zonation object
ztop, zbot, zn, fm = well11tops()
# Iterating over zonation information and printing details for each reservoir
for t, b, n, f in zip(ztop, zbot, zn, fm):
print(f'For RESERVOIR {n}: the top depth={t} and the bottom depth={b}')
For RESERVOIR A3: the top depth=3176.37 and the bottom depth=3243.8 For RESERVOIR A4: the top depth=3268.09 and the bottom depth=3305.87 For RESERVOIR A5: the top depth=3381.49 and the bottom depth=3409.87 For RESERVOIR A6: the top depth=3500.44 and the bottom depth=3519.37 For RESERVOIR A7: the top depth=3554.56 and the bottom depth=3706.26 For RESERVOIR A8: the top depth=3836.44 and the bottom depth=3904.23 For RESERVOIR A9: the top depth=3940.82 and the bottom depth=3981.45 For RESERVOIR A10: the top depth=4053.22 and the bottom depth=4074.87 For RESERVOIR A11: the top depth=4211.51 and the bottom depth=4231.79 For RESERVOIR A12: the top depth=4284.53 and the bottom depth=4310.21 For RESERVOIR A13: the top depth=4399.43 and the bottom depth=4418.35
# Plotting the zone information by calling the plotZone method on the Zonation object,
# specifying the depth axis ('DEPT:1'), log curves to plot (['GR', 'ILD', 'RHOB', 'NPHI']),
# minimum top depth (min(ztop)), maximum bottom depth (max(zbot)), and figure size (12, 30)
well11tops.plotZone('DEPT:1', ['GR', 'ILD', 'RHOB', 'NPHI'], min(ztop), max(zbot), figsize=(12, 30))